package org.ch04.test00.lx03;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 1）性别必须是注解指定的值范围
 * <p>
 * 2）
 * 初始对象时，如果指定了爱好，则使用初始化对象的爱好
 * 初始对象时，如果没有指定了爱好，则使用注解设置的爱好
 *
 * @author ZQX
 * @date 2025-03-31
 */
public class MainTest {
    public static void main(String[] args) {
        // Student zs = new Student("张三", "男", new String[]{"羽毛球", "篮球"});
        // Student zs = new Student("张三", "m", new String[]{"羽毛球", "篮球"});
        Student zs = new Student("张三", "m");


        // 第一：获取操作类的 Class 对象
        Class<Student> clazz = Student.class;

        // 第二：基于 Class 对象实现相关的操作
        // 1.判断类上面是否存在 Desc 注解
        if (clazz.isAnnotationPresent(Desc.class)) {
            // 2.获取注解的值
            String sex = clazz.getAnnotation(Desc.class).sex();
            String[] hobby = clazz.getAnnotation(Desc.class).hobby();

            // 3.逻辑处理 - ["w","m"] - 熟练操作 API
            // 3.1）处理性别问题
            String[] sexArr = sex.split(",");
            List<String> sexList = Arrays.asList(sexArr);
            Set<String> sexSet = new HashSet<>(sexList);
            if (!sexSet.contains(zs.getSex())) {
                throw new RuntimeException("性别非法，性别只能取值：" + sex);
            }

            // 3.2）处理爱好问题
            String[] stuHobby = zs.getHobby();
            // 初始化学生对象时，并没有初始化爱好信息 - 则读取注解的爱好进行初始化工作
            if (stuHobby == null || stuHobby.length == 0) {
                zs.setHobby(hobby);
            }
        }


        System.out.println(zs);

    }
}
